/*
* @Author: MR.Sun
* @Date: 2022/8/3 14:04
* @File: main.go
* @Desc: 文件 写操作的示例

name：要打开的文件名 flag：打开文件的模式。 模式有以下几种：

模式	含义
os.O_WRONLY	只写
os.O_CREATE	创建文件
os.O_RDONLY	只读
os.O_RDWR	读写
os.O_TRUNC	清空
os.O_APPEND	追加
perm：文件权限，一个八进制数。r（读）04，w（写）02，x（执行）01。


*/
package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)

// 直接使用os
func osWrite() {
	file, err := os.OpenFile("1.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		fmt.Printf("os write err %#v\n", err)
		return
	}
	defer file.Close()
	str := "孙事成 \n"
	// 使用Write 写入byte
	file.Write([]byte(str))
	// 使用writestring 直接写入字符串
	file.WriteString("sunshiceng")
}

// 使用bufio 写入
func bufioWrite() {
	file, err := os.OpenFile("2.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		fmt.Printf("bufio write err %#v\n", err)
		return
	}
	defer file.Close()
	writer := bufio.NewWriter(file)
	for i := 0; i <= 10; i++ {
		writer.WriteString("fnn\n") // 将数据写入缓存
	}
	writer.Flush() // 将数据写入文件
}

// 使用io util 进行写入
func ioUtilWrite() {
	str := "孙事成\n1111\n"
	err := ioutil.WriteFile("3.txt", []byte(str), 0666)
	if err != nil {
		fmt.Printf("ioUtilWrite error %#v\n", err)
		return
	}
}

func main() {
	// 使用os 直接写入
	fmt.Println(" 直接使用os 进行写入")
	osWrite()
	fmt.Println(" 使用bufio 进行写入")
	bufioWrite()
	fmt.Println("ioUtilWrite 进行写入")
	ioUtilWrite()
}
